package com.rxb.blog.utils;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

/**
 * Author：rxb
 * Date：2020-02-28 22:14
 * Description：文件相关操作
 */
public class FileUtil {

    /**
     *  上传文件（返回文件的uuid）
     * @param file 上传的文件
     * @param targetDictionary  上传文件的路径（dictionary）
     * @return
     */
    public static String uploadFile( MultipartFile file,String targetDictionary){

        System.out.println( file.getOriginalFilename());
        String originalFilename = file.getOriginalFilename();
        String targetPathSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        String uuid = UUID.randomUUID().toString().replaceAll("-","");

        String targetPath = targetDictionary + File.separator + uuid  + targetPathSuffix;

        try {
            File targetFile = new File(targetPath);
            if(!targetFile.exists()){
                targetFile.mkdirs();
            }
            file.transferTo(targetFile);
            return uuid;
        }catch (Exception e){
            e.printStackTrace();
            return e.getMessage();
        }
    }


    /**
     *  下载文件
     * @param fileName 下载的文件中文名称
     * @param pathResource  下载的文件的路径（非dictionary,具体到文件）
     * @param response
     */
    public static void downloadFile(String fileName,String pathResource,  HttpServletResponse response){
        try {
            // 得到要下载的文件
            File file = new File(pathResource);

            // 设置响应头，控制浏览器下载该文件
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            // 读取要下载的文件，保存到文件输入流
            FileInputStream in = new FileInputStream(pathResource);
            // 创建输出流
            OutputStream out = response.getOutputStream();
            // 创建缓冲区
            byte buffer[] = new byte[1024];
            int len = 0;
            // 循环将输入流中的内容读取到缓冲区当中
            while ((len = in.read(buffer)) > 0) {
                // 输出缓冲区的内容到浏览器，实现文件下载
                out.write(buffer, 0, len);
            }
            // 关闭文件输入流
            in.close();
            // 关闭输出流
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     *  删除文件
     * @param pathResource 删除的文件的路径（非dictionary,具体到文件--后面需要用到删除文件夹再补充）
     */
    public static void deleteFile(String pathResource){
        File fileResource = new File(pathResource);

        System.out.println(fileResource.isFile() );
        System.out.println(fileResource.exists());

        if(fileResource.isFile() && fileResource.exists()){
            // 删除具体的文件
            fileResource.delete();
        }else{
            // 删除 文件夹

        }
    }

    /**
     * 查询一个文件夹下所有的文件名称 定时任务用
     */
    public static void getAllFileName(String path, List<String> fileName) {
        File file = new File(path);

        File[] files = file.listFiles();

        String[] names = file.list();

        if (names != null) {
            fileName.addAll(Arrays.asList(names));
        }

        for (File a : files) {
            if (a.isDirectory()) {
                getAllFileName(a.getAbsolutePath(), fileName);
            }
        }
    }

}
